iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Mobile Development

Android與Spring Boot開發學習之旅系列 第 13

開發學習之旅 Day13 - 使用Spring security保護Java應用程序

  • 分享至 

  • xImage
  •  

Spring security介紹

Spring Security是Spring Framework下的一個開源程式庫,用於保護Java應用程序的安全性。提供全面且可擴展的方案,應對各種安全性需求,例如用於身份驗證、授權、防禦等方面,保護應用程序免受潛在的威脅和攻擊,提高應用程序的安全性。

為什麼要使用Spring security

  • 身份驗證
    提供多種身份驗證方式,可以確保只有合法的用戶可以訪問應用程序。
  • 授權
    有助於確保敏感資源得到適當的保護,只有取得授權才能訪問。
  • 防禦
    防範安全攻擊,例如跨站請求偽造、跨站腳本攻擊、SQL注入等,減少應用程序受到攻擊的風險。
  • 可定制性
    可以根據應用程序需求自定義身份驗證提供者、授權策略、過濾器等。

添加Spring Security依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

創建Spring Security配置類

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
    @Bean
    public SecurityFilterChain configure(HttpSecurity http) throws Exception {
        http.csrf(AbstractHttpConfigurer::disable)
                .authorizeHttpRequests((authorize) -> authorize
                        .requestMatchers(
                                "/api/hello"
                        )
                        .permitAll()
                        .anyRequest()
                        .authenticated()
                );
        return http.build();
    }
}
  • @Configuration:這個註釋說明這是Spring配置類,Spring容器會自動掃描和加載,用於配置安全性。
  • @EnableWebSecurity:這個註釋說明啟用了Spring Security的Web安全性功能。會告訴Spring應用程序使用Spring Security來保護Web應用程序。
  • @RequiredArgsConstructor:這個註釋是Lombok提供,會自動生成帶參數的構造函數。

  • requestMatchers():這個方法定義了哪些請求應該被考慮進行安全性配置。
  • permitAll():這個方法表示上方加入的請求("/api/hello")不需要進行身份驗證,即允許任何人訪問。
  • anyRequest().authenticated():這個方法表示對於其他所有請求,都需要身份驗證。

這邊以上次Day10的請求為例:

  • 這邊訪問"/api/hello"路徑,由於不需要進行身份驗證,所以能成功取得回傳。
    https://ithelp.ithome.com.tw/upload/images/20230923/20150372hRagZPh3XE.png
  • 這邊訪問"/api/example/"路徑,由於不在我們的白名單內,所以會被拒絕訪問。
    https://ithelp.ithome.com.tw/upload/images/20230923/20150372QfZ5XHZuy3.png

上一篇
開發學習之旅 Day12 -簡化Java開發的Lombok
下一篇
開發學習之旅 Day14 - 使用 JSON Web Token 進行身份驗證(一)
系列文
Android與Spring Boot開發學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言